home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Yerk 3.6.6 / Asm source / GetOp < prev    next >
Encoding:
Text File  |  1991-06-16  |  4.5 KB  |  133 lines  |  [TEXT/YERK]

  1. ENDOF
  2.             ascii W OF 1 -> Size ENDOF
  3.             ascii B OF 0 -> Size ENDOF
  4.             202 AsmError                 \ bad operand size
  5.         ENDCASE
  6.         size val" ExtSize returns "
  7. ;
  8.  
  9. : GetSize   { \ Size tt -- tokenType size }
  10.     opSize -> size
  11.     nextToken -> tt
  12.     " ," get: token s=
  13.     IF
  14.         nextToken -> tt
  15.     THEN
  16.     start: token
  17.     " ." indexOf: token
  18.     IF
  19.         drop ( charOf ) nextToken drop msg" EXEC IF"
  20.         get: token extSize -> size
  21.         nextToken -> tt
  22.     THEN
  23.     tt       val" tt=" 
  24.     size     val" size="
  25. ;
  26.  
  27. : ClearOp   { opPtr -- }
  28.     0 seta/d: opPtr
  29.     0 setauxsize: opPtr
  30.     0 setReg: opPtr
  31.     0 setval: opPtr
  32.     0 setmode: opPtr
  33.     0 setauxreg: opPtr
  34.     0 setpcmode: opPtr
  35. ;
  36.  
  37. : GetOp { opPtr \ opDesc type -- }
  38.  
  39.     opptr clearOp
  40.  
  41.     getSize -> opSize -> type
  42.  
  43.     type 1 =                            \ check for 5 or 6 mode, tokentype 1
  44.     IF
  45.         get: token >num setVal: opPtr
  46.         nextToken drop
  47.         token query: operands -> opDesc
  48.         opDesc 0=
  49.         IF
  50.             203 AsmError                \ unknown operand
  51.         ELSE
  52.             mode: opDesc 2 = mode: opDesc 6 = or
  53.             mode: opDesc 9 = or mode: opDesc 10 = or
  54.             IF
  55.                 mode: opDesc dup setpcmode: opPtr
  56.                 7 min val" setMode to" setMode: opPtr
  57.                 mode: opPtr 2 = IF 5 setMode: opPtr THEN
  58.                 reg: opDesc val" setReg to" setReg: opPtr
  59.                 mode: opDesc 6 = mode: opDesc 10 = or
  60.                 IF
  61.                     nextToken drop      \ should be comma
  62.                     nextToken drop token query: operands -> opDesc
  63.                     mode: opDesc 20 = mode: opDesc 21 = or
  64.                     IF
  65.                         reg: opDesc setAuxReg: opPtr
  66.                         mode: opDesc 20 - val" a/d to" setA/D: opPtr
  67.                         1 setAuxSize: opPtr
  68.                     ELSE
  69.                         nextToken 3 =   \ should be '.', len associated with
  70.                                         \ idx reg
  71.                         IF
  72.                             reg: opDesc setAuxReg: opPtr
  73.                             mode: opDesc setA/D: opPtr
  74.                             nextToken drop get: token extSize setAuxSize: opPtr
  75.                         ELSE
  76.                             203 asmError \ unknown operand
  77.                         THEN
  78.                     THEN
  79.                 THEN        
  80.             ELSE
  81.                 203 AsmError             \ unknown operand
  82.             THEN
  83.         THEN
  84.     ELSE
  85.         token query: operands -> opDesc
  86.         opDesc 0= val" T means Label "   \ if operand is a label
  87.         IF      \ label, presumably
  88.             pass 1 = 
  89.             IF
  90.                 token query: symTab
  91.                 swap drop               \ jaf 12/17/85 remove val
  92.                 0=
  93.                 IF
  94.                     0 token enter: symTab
  95.                 THEN
  96.             ELSE                        \ Put code location into value field
  97.                 Token query: symTab
  98.                 drop                    \ jaf 12/17/85 remove flag
  99.                 codePos - 2- setVal: opPtr
  100.             THEN
  101.             9 setMode: opPtr
  102.             2 setReg: opPtr
  103.         ELSE
  104.             reg: opDesc val" reg is " setReg: opPtr
  105.             mode: opDesc val" mode is " setMode: opPtr
  106.             mode: opPtr 11 =         \ an Immediate operand
  107.             IF
  108.                 nextToken
  109.                 1 =
  110.                 IF
  111.                     get: token >num setVal: opPtr
  112.                 ELSE
  113.                     205 asmError
  114.                 THEN
  115.             THEN
  116.             mode: opPtr 8 =         \ a dict pointer,compile an immediate
  117.             IF
  118.                 11 setMode: opPtr
  119.                 4 setReg: opPtr
  120.                 nextToken drop
  121.                 nextToken drop get: token str255 -base latest (find)
  122.                 IF
  123.                     drop
  124.                     setVal: opPtr
  125.                 ELSE
  126.                     216 asmError
  127.                 THEN
  128.                 nextToken drop
  129.             THEN
  130.         THEN
  131.     THEN
  132. ;
  133.